package chapter02

import chapter01.Student

object Test02_Variable {

  /**
    * 1.
    * 基本语法：var | val 变量名 [: 变量类型] = 变量值
    * 声明变量时，类型可以省略（编译器自动推导，即类型推导)
    * 类型确定后，就不能修改，说明Scala是强数据类型语言（同Java）
    * 变量声明时，需要初始值。
    * 在声明/定义一个变量时，可以使用var或者 val来修饰， var修饰的变量可改变，val修饰的变量不可改。
    * val修饰的变量在编译后，等同于加上 final。
    * var 修饰的对象引用可以改变，val修饰的则不可改变，但对象的状态(值)却是可以改变的。(比如：自定义对象、数组、集合等等)
    * 能用常亮的地方尽量不用变量
    */

  /** 2.
    * Scala设计者为什么设计 var 和 val 呢？
    * 1、在实际编程，我们更多的需求是获取/创建一个对象后，读取该对象的属性，或者是修改对象的属性值，但是我们很少去改变这个对象本身。
    *     var dog = new Dog()
    *     dog.age = 99
    *     dog = new Dog()
    *   这时我们就可以使用val定义dog
    *     val dog = new Dog()
    *     dog.age = 99
    * 2、因为val 没有线程安全问题，因此效率高，scala的设计者推荐我们val
    * 3、如果对象需要改变，则使用var
    */
  //基本语法：var | val 变量名 [: 变量类型] = 变量值
  var a: Int = 12
  //  声明变量时，类型可以省略（编译器自动推导，即类型推导)
  val b = 10
  //  类型确定后，就不能修改，说明Scala是强数据类型语言（同Java）
  var c = 20
  //  c = "hello": String;

  private val student = new Student("张飞", 33)
  // age可修改,name不可修改

  student.age = 44



}
